package com.ken.astroboy.util;

import java.util.HashMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class EmojiConverter {
	
	private static HashMap<String, Integer> map = new HashMap<String, Integer>();

    /**
     * 十六进制字符对应关系。如("0",0),("1",1)...("A",10),("B",11)
     */
    static{
        map.put("0", 0);
        map.put("1", 1);
        map.put("2", 2);
        map.put("3", 3);
        map.put("4", 4);
        map.put("5", 5);
        map.put("6", 6);
        map.put("7", 7);
        map.put("8", 8);
        map.put("9", 9);
        map.put("a", 10);
        map.put("b", 11);
        map.put("c", 12);
        map.put("d", 13);
        map.put("e", 14);
        map.put("f", 15);
    }
    
	public static String convert(String in){

		//例子：
		//输入 in  = "<span class=\"emoji emoji2728\"></span>天天<span class=\"emoji emoji1f430\"></span><span class=\"emoji emoji2728\"></span>"
		//返回  out = "\u2728刘小佳\u1f430\u2728"
		//注意，返回的\u2728是一个转义字符，内存中的值是十进制9800(0x2728)。
		
		String result = in;

		if(in.contains("<span class=\"emoji")){
			
			try{
				Pattern p = Pattern.compile("<span class=\"emoji emoji(\\S+)\"></span>");
				
				Matcher m = null;
				
				while(true){
					m = p.matcher(result);
						
					if(m.find()){																				
						char c =  (char) HexToDec(m.group(1));						
						result = m.replaceFirst(String.valueOf(c));
					}else{
						break;
					}
				}
				
			}catch(Exception e){
				result = in;
			}	
		}
		
		return result;
	}

    /**
     * 将十六进制的字符串转化为十进制的数值
     */
    public static long HexToDec(String hexStr) {

    	int length = hexStr.length();
        long result = 0L; // 保存最终的结果
        for (int i = 0; i < length; i++) {
            result += map.get(hexStr.substring(i, i + 1)) * Math.pow(16, length - 1 - i);
        }
        return result;
    }
    
}
